package ua.kpi.apolonov.databases;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

import ua.kpi.apolonov.answers.*;
import ua.kpi.apolonov.factories.ConcreteQuestionTypeFactory;
import ua.kpi.apolonov.questions.*;

/**
 * Constant database
 * @version 1.3 18.03.2013
 * @author Yegor Apolonov
 */

public class StaticDatabase implements Iterable<Question> {
	
    private List<Question> QUESTIONS = new ArrayList<Question>();
    private ConcreteQuestionTypeFactory factory = new ConcreteQuestionTypeFactory();
    
    public StaticDatabase() {
    	initializeDatabase();
    }
    
    public Iterator<Question> iterator() {
    	return QUESTIONS.iterator();
    }
    
    private void initializeDatabase() {
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Сколько примитивных типов данных существует в языке программирования Java?",
    			new ArrayList<Answer>(Arrays.asList(
    				new TrueAnswer("8"),
    				new FalseAnswer("4"),
    		    	new FalseAnswer("6"),
    		        new FalseAnswer("7")
    			))));
    	
    	QUESTIONS.add(factory.createMultipleQuestionType("Выберите правильные утверждения:",
    			new ArrayList<Answer>(Arrays.asList(
    				new TrueAnswer("Арифметические операции над целыми числами могут приводить к ошибкам переполнения"),
    				new TrueAnswer("Не существует автоматического преобразования типов к типу boolean"),
    		    	new FalseAnswer("Сравнение с константой NaN всегда дает истинный результат"),
    		    	new FalseAnswer("7")
    			))));
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Обьявлена переменная symbol символьного типа. Какая из приведенных строчек инициализации является корректной?", 
    			new ArrayList<Answer>(Arrays.asList(
    				new TrueAnswer("symbol = ‘s’;"),
    				new FalseAnswer("symbol = s;"),
    				new FalseAnswer("symbol = “s”;"),
    				new FalseAnswer("symbol = [s];")))));
    	
    	QUESTIONS.add(factory.createYesNoQuestionType("Скомпилируется ли код:\n" +
                "public class Test {\n" +
                "public static boolean returnResult (int x) {\n" +
                "return (x <= Int.POSITIVE_INFINITY);\n" +
                "}\n" + "public static void main (String args[]) {\n" +
                "final int value = 5;\n" + "if (returnResult(value)) {\n" +
                "System.out.println(“1”);\n" + "} else {\n" +
                "System.out.println(“2”);\n" + "}\n" + "}\n" + "}\n", 
                new ArrayList<Answer>(Arrays.asList(
                	new TrueAnswer("No"),
                	new FalseAnswer("Yes")))));
    	
    	QUESTIONS.add(factory.createYesNoQuestionType("Запись вида char symbol = ‘ /*символ*/ ’ всегда корректна в случае символа кодировки UTF-16?",
    			new ArrayList<Answer>(Arrays.asList(
    				new TrueAnswer("No"),
    				new FalseAnswer("Yes")))));
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Какой результат выполнения кода:\n" + 
                "public class Test2 {\n" +
                "public static void main (String args[]) {\n" + 
                "int x = 25;\n" + "int y = 5;\n" + 
                "System.out.println((y / x / y  + (y / x) * 4 * x + x - 1) / x );\n" + 
                "}\n" + "}\n",
                new ArrayList<Answer>(Arrays.asList(
                	new TrueAnswer("0"),
                	new FalseAnswer("1"),
                	new FalseAnswer("26"),
                	new FalseAnswer("5")))));
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Какой результат выполнения следующего кода:\n" + 
                "public class Test3 {\n" +
                "public static void main (String args[]) {\n" + 
                "System.out.println((1+2+”Test”) + (”Test”+1+2));\n" +
                "}\n" + "}\n",
                new ArrayList<Answer>(Arrays.asList(
                	new FalseAnswer("12TestTest12"),
                	new FalseAnswer("3TestTest3"),
                	new FalseAnswer("12TestTest3")))));
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Какой результат выполнения следующего кода:\n" +
                "public class Test4 {\n" +
                "public static void main (String args[]) {\n" + 
                "int x = 6;\n" + 
                "System.out.println( ( (float)x <Float.POSITIVE_INFINITY) && (0.0 == -0.0) );\n" +
                "}\n" + "}\n",
                new ArrayList<Answer>(Arrays.asList(
                	new TrueAnswer("TRUE"),
                	new FalseAnswer("FALSE"),
                	new FalseAnswer("Ошибка компиляции")))));
    	
    	QUESTIONS.add(factory.createYesNoQuestionType("Используется ли тип данных с плавающей точкой для денежных операций?",
    			new ArrayList<Answer>(Arrays.asList(
    				new TrueAnswer("No"),
    				new FalseAnswer("Yes")))));
    	
    	QUESTIONS.add(factory.createSingleQuestionType("Какой результат выполнения следующего кода:\n" + 
                "public class Test5 {\n" + 
                "public static void main (String args[]) {\n" + 
                "int x = 2;\n" + "int y =(float) (x / 10)\n" + "int z =(float) x / 10;\n" + 
                "System.out.println(y + z);\n" + "}\n" + "}\n",
                new ArrayList<Answer>(Arrays.asList(
                	new FalseAnswer("0"),
                	new FalseAnswer("0.0"),
                	new FalseAnswer("0.4")))));
    }
}
